home *** CD-ROM | disk | FTP | other *** search
/ NeXT Education Software Sampler 1992 Fall / NeXT Education Software Sampler 1992 Fall.iso / Programming / Source / PacMan / PreferencesBrain.m < prev    next >
Encoding:
Text File  |  1992-08-17  |  7.5 KB  |  274 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import "PreferencesBrain.h"
  5. #import "InfoController.h"
  6. #import "GameView.h"
  7. #import <stdio.h>
  8. #import <string.h>
  9. #import <appkit/Button.h>
  10.  
  11. @implementation PreferencesBrain
  12.  
  13. - init        // designated initializer sets up game variables
  14. {        // to sensible values.    
  15.     defaultPlayerName = malloc(64);
  16.     version = malloc(8);
  17.     return self;
  18. }
  19.  
  20. /* methods to get at important variables */
  21. - (int)speed { return speed; }
  22. - (BOOL)effects { return effects; }
  23. - (BOOL)music { return music; }
  24. - (BOOL)alert { return alert; }
  25. - (BOOL)autoUnPause { return autoUnPause; }
  26. - (BOOL)autoStart { return autoStart; }
  27. - (BOOL)demoSound {return demoSound; }
  28. - setAlert:(BOOL)al { alert = al; return self; }
  29. - setAutoUnPause:(BOOL)al { autoUnPause = al; return self; }
  30. - setAutoStart:(BOOL)al { autoStart = al; return self; }
  31.  
  32. - readDefaults:sender        // get preferences from defaults database
  33. {
  34. // I would be smarter to use a defaults structure to grab all the defaults
  35. // at once.  Why haven't I?  This object has been through tons of changes,
  36. // and that's one of the lower priorities; it would speed up launch a little
  37. // bit, but not any significant amount....
  38.     const char *tmpstr;
  39.     int tempInt;
  40.     
  41.     tmpstr = NXGetDefaultValue ([NXApp appName], "SoundOn");
  42.     if (!tmpstr) tempInt = NO;
  43.     else sscanf(tmpstr, "%d", &tempInt);
  44.     if (tempInt) effects = YES; else effects = NO;
  45.     
  46.     tmpstr = NXGetDefaultValue ([NXApp appName], "Alerts");
  47.     if (!tmpstr) alert = YES;
  48.     else {
  49.     sscanf(tmpstr, "%d", &tempInt);
  50.     if (tempInt) alert = YES; else alert = NO;
  51.     }
  52.  
  53.     tmpstr = NXGetDefaultValue ([NXApp appName], "AutoUnPause");
  54.     if (!tmpstr) autoUnPause = YES;
  55.     else {
  56.     sscanf(tmpstr, "%d", &tempInt);
  57.     if (tempInt) autoUnPause = YES; else autoUnPause = NO;
  58.     }
  59.  
  60.     tmpstr = NXGetDefaultValue ([NXApp appName], "AutoStart");
  61.     if (!tmpstr) autoStart = YES;
  62.     else {
  63.     sscanf(tmpstr, "%d", &tempInt);
  64.     if (tempInt) autoStart = YES; else autoStart = NO;
  65.     }
  66.  
  67.     tmpstr = NXGetDefaultValue ([NXApp appName], "DemoSound");
  68.     if (!tmpstr) demoSound = YES;
  69.     else {
  70.     sscanf(tmpstr, "%d", &tempInt);
  71.     if (tempInt) demoSound = YES; else demoSound = NO;
  72.     }
  73.  
  74.     tmpstr = NXGetDefaultValue ([NXApp appName], "MusicOn");
  75.     if (!tmpstr) tempInt = NO;
  76.     else sscanf(tmpstr, "%d", &tempInt);
  77.     if (tempInt) music = YES; else music = NO;
  78.     
  79.     tmpstr = NXGetDefaultValue ([NXApp appName], "GameSpeed");
  80.     if (!tmpstr) speed = 1;
  81.     else sscanf(tmpstr, "%d", &speed);
  82.     if ((speed < 0) || (speed > 3)) speed = 1;
  83.  
  84.     tmpstr = NXGetDefaultValue ([NXApp appName], "PlayerName");
  85.     if (tmpstr == NULL) strcpy(defaultPlayerName,"MysteryPlayer");
  86.     else strcpy(defaultPlayerName,tmpstr); 
  87.     
  88.     tmpstr = NXGetDefaultValue ([NXApp appName], "Version");
  89.     if (tmpstr == NULL) strcpy(version,"0.0");
  90.     else strcpy(version,tmpstr); 
  91.     
  92.     [gameScreen getPreferences];
  93.     return self;
  94. }
  95.  
  96. - writeDefaults:sender        // save preferences in defaults database
  97. {
  98.     // This is a dumb way to do it, as above, since a defaults structure
  99.     // is much more efficient.  See note for above method.
  100.     char str[32];
  101.     int tempInt;
  102.     
  103.     tempInt = 0; if (alert) tempInt = 1;
  104.     sprintf(str, "%d\0", tempInt);
  105.     NXWriteDefault ([NXApp appName], "Alerts", str);
  106.     tempInt = 0; if (autoStart) tempInt = 1;
  107.     sprintf(str, "%d\0", tempInt);
  108.     NXWriteDefault ([NXApp appName], "AutoStart", str);
  109.     tempInt = 0; if (autoUnPause) tempInt = 1;
  110.     sprintf(str, "%d\0", tempInt);
  111.     NXWriteDefault ([NXApp appName], "AutoUnPause", str);
  112.     tempInt = 0; if (demoSound) tempInt = 1;
  113.     sprintf(str, "%d\0", tempInt);
  114.     NXWriteDefault ([NXApp appName], "DemoSound", str);
  115.     tempInt = 0; if (music) tempInt = 1;
  116.     sprintf(str, "%d\0", tempInt);
  117.     NXWriteDefault ([NXApp appName], "MusicOn", str);
  118.     tempInt = 0; if (effects) tempInt = 1;
  119.     sprintf(str, "%d\0", tempInt);
  120.     NXWriteDefault ([NXApp appName], "SoundOn", str);
  121.     sprintf(str, "%d\0", speed);  
  122.     NXWriteDefault ([NXApp appName], "GameSpeed", str);
  123.     NXWriteDefault ([NXApp appName], "PlayerName", defaultPlayerName);
  124.     NXWriteDefault ([NXApp appName], "Version", version);
  125.     
  126.     return self;
  127. }
  128.  
  129. - (BOOL)firstTimeCheck // first time running this version?
  130. {
  131.     char *str;
  132.     
  133.     
  134.     if (strcmp(version, versionString)) { // first time!
  135.         str = malloc(128);        // Put up a welcome Panel
  136.         sprintf(str, "Welcome to PacMan %s!  I hope you like it!",
  137.             versionString);
  138.         strcpy(version, versionString);
  139.         NXRunAlertPanel("Welcome", str,
  140.             "Let's Play", NULL, NULL);
  141.         free(str);
  142.         if (speed == 2) speed = 3; // compatability with 1.0;
  143.             // this will be removed in 2.0...it keeps the original "fast"
  144.             // Preference playing the same (moves it over to "hyper")
  145.         return YES;
  146.     }
  147.     return NO;
  148. }
  149.  
  150. - revert:sender    // return to default values
  151. {
  152.     effects = NO;
  153.     alert = YES;
  154.     autoUnPause = YES;
  155.     autoStart = YES;
  156.     demoSound = NO;
  157.     music = NO;
  158.     [gameScreen revertBackground:sender];
  159.     speed = 1;
  160.     // I'm not reverting "defaultPlayerName"; doesn't seem necessary
  161.     
  162.     [gameScreen getPreferences];   // make sure that the gameScreen is aware
  163.     return [self preferences:self]; // update the panel
  164. }
  165.  
  166. - speedChange:sender            // accept changes in speed
  167. {
  168.     speed = [sender selectedTag];
  169.     return self;
  170. }
  171.  
  172. - preferences:sender        // sets controls on pref panel & brings it up
  173. {
  174.     [self preferencesPanel]; // be sure panel is loaded; throw away return val.
  175.     [speedButtons selectCellWithTag:speed];
  176.     [musicButtons selectCellWithTag:music];
  177.     [effectButtons selectCellWithTag:effects];
  178.     [alertSwitch setState:alert];
  179.     [autoStartSwitch setState:autoStart];
  180.     [autoUnPauseSwitch setState:autoUnPause];
  181.     [demoSwitch setState:demoSound];
  182.     [[self preferencesPanel] orderFront:self];
  183.     return self;
  184. }
  185.  
  186. - preferencesPanel    // return the preferencesPanel, load it if needed.
  187. {
  188.   if( !preferencesPanel)
  189.     [NXApp loadNibSection:"PreferencesPanel.nib" owner:self withNames:NO];
  190.   return preferencesPanel;
  191. }
  192.  
  193. - musicChange:sender        // turn music on/off
  194. {
  195.     music = [sender selectedTag];
  196.     if (music) [gameScreen musicOn];
  197.     else [gameScreen musicOff];
  198.     return self;
  199. }
  200.  
  201. - effectsChange:sender        // turn sound effects on/off
  202. {
  203.     effects = [sender selectedTag];
  204.     if (effects) [gameScreen soundOn];
  205.     else [gameScreen soundOff];
  206.     return self;
  207. }
  208.  
  209. - setDefaultPlayerName:(char *)aString    // change default player name
  210. {
  211.     defaultPlayerName = aString;
  212.     return self;
  213. }
  214.  
  215. - (const char *)defaultPlayerName  // return ptr to defaultPlayerName string
  216. {
  217.     return defaultPlayerName;
  218. }
  219.  
  220. - alertChange:sender
  221. {
  222.     alert = NO;
  223.     if ([sender state]) alert = YES;
  224.     return self;
  225. }
  226.  
  227. - unPauseChange:sender
  228. {
  229.     autoUnPause = NO;
  230.     if ([sender state]) autoUnPause = YES;
  231.     return self;
  232. }
  233.  
  234. - autoStartChange:sender
  235. {
  236.     autoStart = NO;
  237.     if ([sender state]) autoStart = YES;
  238.     return self;
  239. }
  240.  
  241. - demoSoundChange:sender    // turn off sound only in demo
  242. {
  243.     demoSound = NO;
  244.     if ([sender state]) demoSound = YES;
  245.     return self;
  246. }
  247.  
  248. - setBack:sender        // set the background image
  249. { // forward the message to the game screen
  250.     return [gameScreen changeBackground:sender];
  251. }
  252.  
  253. - revertBack:sender        // revert to default background image
  254. { // forward the message to the game screen
  255.     return [gameScreen revertBackground:sender];
  256. }
  257.  
  258. - back1:sender        // set black background - forward to gamescreen
  259. {
  260.     return [gameScreen back1:sender];
  261. }
  262.  
  263. - back2:sender        // set solid.tiff background
  264. { // - forward to gamescreen
  265.     return [gameScreen back2:sender];
  266. }
  267.  
  268. - back3:sender        // set Lyapunov.tiff background
  269. { // - forward to gamescreen
  270.     return [gameScreen back3:sender];
  271. }
  272.  
  273. @end
  274.